With the advent and explosion of computer networking, many computing tasks have migrated from being performed on a two-node system (a client and a centralized server), to being performed utilizing distributed computing. Distributed computing is a programming model in which processing may occur in many different places (or nodes) around a network. Processing can occur wherever it makes the most sense, whether that is on a server, personal computer, handheld device, or other smart device.
In order to enable communication between objects in a distributed computing environment, a number of technical hurdles must be overcome. First, it is necessary for a secure asynchronous communication channel between the distributed objects to be established. However, establishing a secure asynchronous communications channel among devices across network hops and firewalls has often been a challenge. In order to be effective, the communications channel between the distributed objects should support the traversal of any number of network hops, unmanaged firewalls, network address translation (“NAT”) devices, and hyper-text transport protocol (“HTTP”) proxy devices. Moreover, communications from both objects should be authenticated and logged, if possible.
A number of standards do exist that enable communication between distributed objects. The distributed component object model (“DCOM”) and the common object request broker architecture (“CORBA”) are examples of such standards. However, these standards generally suffer from the shortcomings described above. In particular, these standards may be difficult to use in the presence of firewalls, NAT devices, and HTTP proxies. Moreover, these standards require the use of complex client and server authentication and logging configurations.
Another way of enabling communication between distributed objects is through the use of web services. Web services send and receive messages using formats and protocols that are described in a way that allows service requesters to easily find out how to make use of the service. Web services also have a number of shortcomings, however. In particular, web services do not inherently provide functionality for authenticating the client and server components that make the requests. Moreover, web services do not provide an asynchronous 2-way communications channel suitable for robust 2-way communication between distributed objects without the developer programmatically implementing custom solutions to these requirements.
It is with respect to these considerations and others that the various embodiments of the present invention have been made.